package com.java.test2;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * @author luzhikun
 * @date 2020/12/20-21:20
 * <p>
 * 异常的处理：抓抛模型
 * <p>
 * 过程一：“抛”  程序在正常运行的过程中，一旦出现异常，就会在异常代码处生成一个当前异常类的对象，并将此对象抛出。
 * <p>
 * 一旦抛出异常其后的代码就不再执行。
 * <p>
 * 过程二： “抓”         可以理解为异常的处理方式   ① try-catch-finally    ② throws
 * <p>
 * 关于异常对象的产生：① 系统自动生成的异常对象
 * ②手动的生成一个异常对象，并抛出（throw）
 * <p>
 * <p>
 * 二、try-catch-finally的是使用
 * <p>
 * 格式：
 * try{
 * //可能出现异常的代码
 * }catch(异常类型1   变量名1){
 * //处理方式一
 * }catch（异常类型2   变量名2）{
 * //处理方式二
 * }catch（异常类型3   变量名3）{
 * //处理方式三
 * }
 * 。。。。。。
 * finally{
 * //一定会执行的代码
 * }
 * <p>
 * java异常处理的方式
 * <p>
 * 方式一：try-catch-finally
 * 说明：
 * 1.finally是可选的
 * 2.使用try将可能发生异常的代码包装起来，在执行过程中，一旦出现异常，就会生成一个此异常类的对象，
 * 然后用这个对象去catch中匹配相应的类型
 * 3.一旦try中的异常对象匹配到某一个catch中就进入这个catch中进行处理，处理结束后，就跳出当前try-catch结构（在没有写finally的情况下）
 * 继续执行其后的代码。
 * 4.catch中的异常类型，如果没有子父类关系，则谁声明在上，谁声明在下无所谓。
 * catch中的异常类型，如果有子父类关系，则要求子类必须声明在父类上方否则报错。
 * 5.常用的异常处理对象处理的方式：①String  getMessage（）     ②printStrackTrace（）
 * 6.在try结构中声明的变量当出了try的作用域后就不能再使用了
 * 7.try-catch-finally结构可以相互嵌套
 * 体会一： 使用 try-catch-finally 处理编译时的错误，使得程序在编译时不在报错，但是运行时仍可能出错
 * 相当于我们使用try-catch-finally 这个结构使这个异常程序 延迟到运行时才报错。
 * <p>
 * 体会二：由于开发中，运行时异常比较常见，所以我们平时不针对运行时异常进行try-catch-fianlly处理
 * 针对编译时异常，我们一定要考虑异常的处理
 * <p>
 * 方式二:throws+异常类型
 */
public class ExceptionTest_2 {
    //    @Test
    public static void main(String[] args) {
        //运行时异常
        String a = "abc";
        try {
            int b = Integer.parseInt(a);

            System.out.println("helloWold");
        } catch (NumberFormatException e) {
            System.out.println("出现异常了，不要怕，我不会解决你的");
            //方式一：
//            System.out.println(e.getMessage());
            //方式二：
            e.printStackTrace();
        } catch (NullPointerException e) {
            System.out.println("出现异常了，不要怕，你不是");
        } catch (Exception e) {
            System.out.println("我是最后一个");
        } finally {
            System.out.println("hellowoled");
        }

        try {
            FileInputStream f1 = new FileInputStream("text");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }


    }

}
